#include <iostream>
#include <cstdio>
using namespace std;

int n;
int total;
int num[100005] = {1};

int print(int t) {
    int p=num[1];
    int cross=0;

    for (int i = 2; i <= t ; i++) {
       cross+=p*num[i];
        p+=num[i];
    }
    cout <<cross << endl;
}


void dfs(int s, int t) { //s是每一步拆分的数
    for (int i = num[t - 1]; i <= s; i++) {
        if (i < n) {	//当前数i要大于等于前1位数，且不超过n
            num[t] = i;
            s -= i;		//拆分后的s
            if (s == 0) {	//当拆分完了后我们打印记录的值
                print(t);
            } else {		//否则,我们继续递归
                dfs(s,t + 1);
            }
            s += i;		//回溯，加上拆分的数，以便产生所有可能产生的拆分
        }
    }
}

int main() {
    scanf("%d",&n);
    dfs(n, 1);
    printf("%d\n",total);
    return 0;
}
